<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 循环
        // forEach  map  some  every  reduce
        // var arr = ['张三', '李四', 1, 77]

        // arr.forEach(function(item,key,arr){
        //     console.log(item,key,arr);
        // })



        // 函数的定义
        // function myForEach(arr, fn) {
        //     for (var i = 0; i < arr.length; i++) {
        //         fn(arr[i], i, arr)
        //     }
        // }

        // 函数的调用
        // myForEach(arr,function(item,key,arr){
        //     console.log(item,key,arr);
        // })

        // Array.prototype.myForEach = function (fn) {
        //     for (var i = 0; i < this.length; i++) {
        //         fn(this[i], i, this)
        //     }
        // }

        // arr.myForEach(function (item, key, arr) {
        //     console.log(item, key, arr);
        // })

        var arr = ["张三", "李四", "王五"];
        // var res = arr.map(function (item, key, arr) {
        //     return item;
        // })

        // 用for循环模拟实现 map
        function mymap(arr, fn) {
            var result = [];
            for (var i = 0; i < arr.length; i++) {
                var res = fn(arr[i], i, arr);
                result.push(res);
            }
            return result;
        }

        var res = mymap(arr, function (item, key, arr) {
            return item;
        })
        console.log(res);


        // reduce
        // 数字的累加 
        // var arr = [1, 2, 3, 4]
        // var res = arr.reduce(function (pre, cur, idx) {
        //     return pre + cur;
        // }, 0)
        // console.log(res);


        // 数组的累加
        // var arr = [1, 2, 3, 4]
        // var res = arr.reduce(function (pre, cur, idx) {
        //     pre.push(cur + 10);
        //     return pre
        // }, [])
        // console.log(res);

        // 对象的累加
        // var arr = [1, 2, 3, 4, 3, 4, 9]
        // var res = arr.reduce(function (pre, cur, idx) {
        //     pre[cur] = 1;
        //     return pre
        // }, {})
        // console.log(res);
        //  给数组去重
        // var arr = [1, 2, 1, 3, 2, 4, 3, 5, 5]

        // var result = arr.reduce(function(pre,current){
        //     // console.log(pre);
        //     // console.log(pre.indexOf(current));
        //     pre.indexOf(current) === -1 ? pre.push(current) : null
        //     return pre;
        // }, []);
        // console.log(result);

        // var arr = [1, 2, 22, 3, 1, 2, 4, undefined]
        // var res = arr.reduce(function (pre, cur) {
        //     pre.indexOf(cur) === -1 ? pre.push(cur) : null;
        //     return pre
        // }, [])
        // console.log(res);




        // 给字符串去重
        // var str = "abcabccaaa";
        // // console.log(str[1])
        // var arr = [];
        // for (var i = 0; i < str.length; i++) {
        //     arr.push(str[i]);
        // }
        // // console.log(arr);

        // var res = arr.reduce(function (pre, current) {
            // pre[current] = 1;
            // {a:1,b:1,c:1}
            // 核心： 判断 current ：a b c 存不存在？如果不存在 初始化一个 a:1 b:1 c:1
            // 存在 在以前的基础上 加一 a:1 ++ --->a:2
        //     typeof pre[current] === "undefined" ? pre[current] = 1 : pre[current]++;
        //     return pre;
        // }, {});
        // console.log(res);



    </script>
</body>

</html>